public class LeetCode509 {
    class Solution {
        /**
         * 计算斐波那契数列中的第 n 个数。
         * 斐波那契数列定义如下：
         * F(0) = 0, F(1) = 1
         * F(n) = F(n - 1) + F(n - 2), 对于 n >= 2.
         *
         * @param n 需要计算的斐波那契数列的位置（非负整数）
         * @return 斐波那契数列中位置为 n 的数值
         */
        public int fib(int n) {
            // 如果 n 是 0 或者 1，直接返回 n。这是斐波那契数列的两个基本条件。
            if (n <= 1) {
                return n;
            }

            // 初始化 prev 和 curr 变量来保存斐波那契数列的前两个值。
            // prev 表示 F(n-2)，curr 表示 F(n-1)。
            int prev = 0, curr = 1;

            // 从 2 开始迭代到 n，逐步更新 prev 和 curr 来计算斐波那契数列的值。
            for (int i = 2; i <= n; i++) {
                // sum 用来存储当前的斐波那契数，即 F(i) = F(i-1) + F(i-2)
                int sum = prev + curr;

                // 更新 prev 为之前的 curr，即 F(i-2) = F(i-1)
                prev = curr;

                // 更新 curr 为新的和 sum，即 F(i-1) = F(i)
                curr = sum;
            }

            // 最后，curr 将包含第 n 个斐波那契数，因此我们返回 curr。
            return curr;
        }
    }
}
